The general configuration of a data processing system typically comprises a processor or processors, a main memory, and a plurality of various types of peripheral devices or terminals (sometimes called I/O units), which more specifically may be card readers, magnetic tape units, card punches, printers, disk files, supervisory terminals, and so on. The optimum systems generally involve the configuration wherein the peripheral devices are handled by independent interface control units so that the processor is free to access and process data contained in the main memory. In configurations having separate control means for the peripheral input-output devices, it is possible to have parallel or concurrent processing occurring at the same time that input-output (I/O) operations occur. These concurrent processing I/O operations occur within the same program which operates through one of the processors, and which also initiates all input-output operations. In addition the program must have some means of determining when the I/O operations are inactive or have been completed.
As an example, if a program calls for a file of data to be loaded into the main memory, it must be able to determine when that operation has been completed before it can go ahead to make use of the data. Thus, an input-output operation is initiated or started by the program, as by some type of "initiate instruction" which provides, typically, an address pointing to an "I/O descriptor" which is stored in the main memory. This descriptor identifies the peripheral device from which data is to be received and/or transmitted, it identifies the type of operation such as a "Read" or a "Write", and also identifies the field of main memory locations to be used in the input-output operation. Generally this I/O descriptor is transferred to a control means (I/O control means) to control the transfer of data between the peripheral terminal device and the main memory.
When the input-output operation is "complete", such as by the transfer of the data from the peripheral unit to the main memory to load the main memory, then there is a need for some type of a completion statement, which is typically referred to as a "Result Descriptor". Usually this is transferred from the I/O control means to some specific location in main memory known to the program being used. Typically, the Result Descriptor includes information identifying the particular peripheral terminal device and further includes information as to the result of or the status of that particular input-output operation -- thus, to provide information as to whether the transfer was complete and correct, or whether any exception conditions occurred or whether any errors occurred or any other peculiar situations arose in regard to the transaction involving that particular peripheral terminal device.
Thus, when a program initiates an input-output operation, the program must have some means to determine when the input-output operation has been completed. A standard technique in this respect is for the program to have instructions to interrogate the Result Descriptors periodically, to determine when and if a particular input-output operation has been completed. However, it is much simpler if the input-output control means indicates when the transfer operation is finished. In accomplishing this, it is usually necessary to interrupt whatever operation the processor has underway, and force it to examine the Result Descriptors and to take appropriate action. This stopping or interruption of the processor's activities is generally designated as an "Interrupt".
Thus, when an interrupt occurs, the processor must stop the program it is working on, it must make a fixed notation of what point in the program execution it was interrupted and it must then store the contents of certain registers and control flip-flops so it can have information as to where it should return in the program after the completion of the interrupt cycle; and then the processor must transfer its attention and operation to the program designed to handle and service the Interrupt condition.
Certain systems such as the system described herein, have a program for servicing "Interrupt" conditions, which program is sometimes referred to as MCP or a master control program. This program must keep a record of current input-output operations and associate the particular Interrupt with the particular input-output operation that caused it. Then it must analyze the results of this Interrupt cycle to see if any unusual circumstances or exceptions occurred or if an error condition was reported, so that corrective and appropriate action may be taken. The Interrupt program must take the results of the input-output operation and make them available to the program that initiated the input-output operation and then further determine if other input-output operations are waiting to be initiated and, if so, to take action to initiate other needful input-output operations.
In many of the prior and present system configurations, many calls or request for memory access would come in to get memory service, but because of the limited bandpass and time available for various peripheral units, many I/O transfers would be incomplete and cause "access errors".
Also many of the prior art system configurations provided only one or two communication paths or channels to a multitude number of peripheral terminal units so that I/O transfers of a particular peripheral terminal unit had to wait their turn in sharing access and use of a communications bus. This introduced congestion and delay into the system. It also made difficulties in systems involving multi-programming since efforts are made to match a job having heavy input-output requirements with another job that is "processor-bound" and which has only limited input-output requirements.
Many of the present day data processing systems have a single communication path or a limited number of communication paths between the central processing unit and the peripheral units. Generally within the communication path there is one or more "input-output control" means. When an input-output path is requested by a processor, the path will only generally become available when: the peripheral unit is not initiating a transfer operation; the peripheral unit is not busy in a transfer or other operation with the input-output control means; the peripheral unit or its input-output control means is not busy with other operations.
The data-transfer rate of the input-output control means is, of course, a limiting factor in the operation of the system since the often slow transfer rate of certain peripheral units (which are passed through the input-output control means) will unnecessarily tie up the processor and memory activity to the low speed of the peripheral terminal unit.
Thus, many data processing systems have come to be provided with a plurality of input-output control means which include buffers, to permit a particular peripheral or group of peripherals to communicate with the main system. When there are a plurality of input-output control means (through which pass the communication channels to individual peripheral units or groups of such units) some prior art systems have used the method of operating the data transfer operation in a sequential fashion so that the various input-output control means take turns in serving the peripherals which are associated with them.
A difficulty arises here in that certain peripheral units and their associated input-output control means are busier than others, and certain of the channels involved actually need more communications-time than they are getting. A "channel" may be looked at as a communication path between the main system, through the input-output control means, over to the peripheral unit. Thus, there can occur situations where certain channels are "short changed" to the extent that a great number of "access errors" will be developed. Access errors involve the situation where the data bytes being transferred through the input-output control means do not comprise complete message units but consist only of non-usable fractions of message units. As a result of this, the central processing unit would not be getting or transferring useful information and would have to become fixated on continually requesting the same input-output operations over and over again. Thus, when the peripheral units are placed in a situation where they are unable to send or receive an entire message unit or record, then the likelihood of access errors occurs which leads to uncompleted cycles in regard to a particular channel and no successful completion of transfer of the required informational data.
It is desired that the maximum transfer of data occur through the mentioned plurality of input-output control means, and without such access errors which lead to incomplete cycles of data transfer (which are unusable, and the time period of which is wasted and of no use, thus tying up valuable processor time).
Thus, in such a system configuration, problems arise in regard to how much time should be allocated to each of the individual channels for data transfer operations and the further problem of which channels should be given priority status over the other channels.
Now, in data processing systems where multitudes of peripheral units are involved (many of which are at differently located installation sites) it is necessary to have groupings of input-output control means to handle the variety of peripheral units at each given site. Thus, the priority problems involve not only the priority to be given as to the competition among peripheral units at one local given site, but also involve the priority problems of priority allocation as between the different locational sites, each of which have their own input-output control means.